<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>

        //ES6之前的函数定义方式（早期函数参数默认值的定义方式）
        function calc(a,b){
            
            // if(!a){
            //     a=0;
            // }
            // if(!b){
            //     b=0;
            // }
            a=a||0;
            b=b||0;

            var sum=a+b;
            console.log(sum);
        }
        // calc(200);
        calc(NaN,300);

        // ES6中提供的函数定义形参时的默认赋值语法
        function show(x,y="我是默认值呀"){
            console.log(x);
            console.log(y);
            
        }
        // show(100,200);
        show(100);
        console.log("--------------------");

        function calcSum(){
            var x=300;
            var y=400;
            return x+y;
        }

        //ES6中形参的默认值可以赋值为函数调用
        // ES6中形参默认值是在该函数被调用时才确定
        // 函数形参设置了默认值，并且有对应的实参，以实参优先
        function show2(a=calcSum()){
            console.log(a);
        }
        show2(1000);
        show2();

        function show3(arr,leg=arr.length){
            console.log("数组:",arr);
            console.log("长度:",leg);
        }
        show3([100,20,400,90]);
        
        // 函数形参解构和形参默认值同时出现的时候
        //     1.函数形参默认值，只有在该函数调用并且未传入参数时候获取
        //     2.形参解构后的对应的属性默认，必须在解构表达式中定义

        var user={
            name:"tom",
            age:20
        };
        var user2={
            name:"alice"
        };
        // function show4({name,age}={age:98}){
        function show4({name,age=40}={}){
            console.log(name,age);
        }
        // show4(user);
        // show4(user2);
        show4();

        
    </script>
</head>
<body>
    
</body>
</html>